package org.aileen.blog.model;

import lombok.Data;
import org.aileen.blog.enmus.ResultCodeEnum;

/**
 * 因为后端接口返回的数据结果的格式都不相同,所以我们需要对后端接口返回的数据结果进行统一的封装
 * 这里我们将后端接口返回的数据结果进行统一的封装成Result对象
 * 于是->我们创建ResponseAdvice来进行此操作
 * @param <T>
 */
@Data
public class Result<T> {
    private int code;
    private String errMsg;
    private T data;

    //将后端查询到的数据结果封装成Result对象的几种方法

    //业务执行成功时返回的方法
    public static <T> Result success(T data){
        Result result = new Result();
        result.setCode(ResultCodeEnum.SUCCESS.getCode());
        result.setData(data);
        return result;
    }

    //业务执行失败可能返回参数的几种方法
    //①业务执行失败时返回的方法
    public static <T> Result fail(String errMsg){
        Result result = new Result();
        result.setCode(ResultCodeEnum.FAIL.getCode());
        result.setErrMsg(errMsg);
        return result;
    }

    //②业务执行失败返回含有错误码的方法
    public static <T> Result fail(String errMsg , T data){
        Result result = new Result();
        result.setCode(ResultCodeEnum.FAIL.getCode());
        result.setErrMsg(errMsg);
        result.setData(data);
        return result;
    }

    //③业务执行失败返回含有错误码和数据的方法
    public static <T> Result fail(int code , String errMsg , T data){
        Result result = new Result();
        result.setCode(code);
        result.setErrMsg(errMsg);
        result.setData(data);
        return result;
    }

    //将状态码和异常信息封装到Result对象中
    public static <T> Result fail(int code , String errMsg ){
        Result result = new Result();
        result.setCode(code);
        result.setErrMsg(errMsg);
        return result;
    }

    //未登录时返回的结果
    public static <T> Result nologin(String errMsg , T data){
        Result result = new Result();
        result.setCode(ResultCodeEnum.NO_LOGIN.getCode());
        result.setErrMsg(errMsg);
        result.setData(data);
        return result;
    }
}
